òɾۿûѧϰʹá
ԭַhttps://www.joinquant.com/post/15078

ԭһ˵ʽ鵽ԭĺ߽ۡ


ԭĲԴ£

#https://www.joinquant.com/post/15018?tag=algorithm
'''
ͼָָ꣬KD
ϽDʱȫ
½Dʱȫ
'''

import jqdata
from jqlib.technical_analysis import *

def initialize(context):
    """ʼ"""
    # 趨׼
    set_benchmark('000300.XSHG')
    # ̬Ȩ
    set_option('use_real_price', True)
    # Ʊÿʽʱǣ
    # ʱӶ֮
    # ʱӶ֮ǧ֮һӡ˰
    # ÿʽͿ5ԪǮ
    set_order_cost(OrderCost(
        open_tax=0, 
        close_tax=0.001, 
        open_commission=0.0003, 
        close_commission=0.0003, 
        close_today_commission=0, 
        min_commission=5
        ), type='stock')
    # ǰ
    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')
    # ʱ
    run_daily(market_open, time='open', reference_security='000300.XSHG')
    # ̺
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    
    
def before_market_open(context):
    """ǰк"""
    # ʱ 
    log.info('before_market_openʱ䣺'+str(context.current_dt.time()))
    # ΢ŷϢ
    send_message('õһ죬ף٬˳')
    # Ҫ˵ĹƱ
    g.security = '000016.XSHE'
    

def market_open(context):
    """ʱк"""
    # ʱ 
    log.info('market_openʱ䣺'+str(context.current_dt.time()))
    log.info('previous_dae',context.previous_date)
    security = g.security
    # KDȡúKֵDֵ
    K1, D1 = KD(security, check_date=context.current_dt, N=9, M1=3, M2=3)
    K2, D2 = KD(security, check_date=context.previous_date-datetime.timedelta(days=1),N=9,M1=3,M2=3)
    # ȡõǰֽ
    cash = context.portfolio.available_cash
    # γɽ棬ȫ
    if K1>D1 and K2 <=D2:
        # ¼
        log.info('Ʊ %s' % (security))
        # cashƱ
        order_value(security, cash)
    # γ棬Ŀǰͷ,пƱȫ
    elif K1<=D1 and K2 >D2  and context.portfolio.positions[security].closeable_amount > 0:
        # ¼
        log.info('Ʊ %s' % (security))
        # йƱʹֻƱճΪ0
        order_target(security, 0)
        
def after_market_close(context):
    """̺к"""
    # ʱ 
    log.info('after_market_closeʱ䣺'+str(context.current_dt.time()))
    # õгЧ¼
    trades = get_trades()
    for _trade in trades.values():
        log.info('ɽ¼'+str(_trade))
    log.info('һĽ׽ף')
    